Announcing Flazr – download RTMP (Flash video) streams

A quick post to announce my new open-source project: http://flazr.com

I had done most of the coding early this year and was really feeling bad about sitting on the code and not having time to package and release as open source. Judging by the number of hits I keep getting on this blog entry I made previously on “how to download RTMP streams with Red5” – there appears to be a lot of demand for this.

Flazr is a Java implementation of the RTMP protocol using the excellent Apache Mina project. I think I was able to come up with a far more concise and readable implementation than what the Red5 project uses – which is not that surprising – because the scope of Red5 is much bigger and Flazr focuses only on the client side. I do feel that Flazr will be useful as an additional reference for those interested in understanding the details of the RTMP protocol.

One of the highlights of Flazr (especially from a Java perspective) is the usage of Groovy for scripting. Groovy allows the end-user to script things such as scraping the HTML from a given URL, parsing it and then invoking the RTMP client routine with the right parameters. All this in a platform-independent manner, without the need to compile anything and using a normal text-editor. I expect Flazr’s Groovy approach to be much easier to use (and arguably more powerful) than the PERL-driven approach that projects like “get_iplayer” and “rtmpdump” use.

Flazr has been designed so that end-users can extend the capabilities far beyond what the core supports – using just some plain-text Groovy scripts. This means that end-users won’t need to depend on the project team (*ahem* just me for now :) to pitch in and make changes. I’m quite interested to see how this turns out in practice.

All in all I’m quite positive about Groovy’s useful-ness, the example scripts that come with the Flazr distribution demonstrate usage of the nifty XmlSlurper and implementing a Java interface on-the-fly. End users should be able to even plug in third-party libraries if they so desire and make use of all that the JVM offers.

About Peter Thomas
https://twitter.com/ptrthomas

22 Responses to Announcing Flazr – download RTMP (Flash video) streams

  1. Max Mustermann says:

    Hi Peter,

    I used the very cool groovy scripting capability of Flazr to write a small script for downloading (free) videos from RTLNow. Unfortunately every download stops after about 30 seconds of downloaded video. Do you have any idea why this might happen? Do you plan to include a resume option to Flazr to enable continuing aborted downloads (like RTMPDump has)?

    Here’s the script I used for my tests:

    import com.flazr.*

    // RTLNow video downloading
    def videoId = “11811”
    println “videoId: ‘” + videoId + “‘”

    // Get XML containing information about video with given ID
    def url = “http://rtl-now.rtl.de/logic/generate_film_xml08.php?para1=” + videoId
    def xml = Utils.getOverHttp(url)

    // Extract infos for downloading video
    def data = new XmlSlurper().parseText(xml)
    def videoinfo = data.playlist.videoinfo[0]
    def filename = videoinfo.filename.text()
    println “filename: ‘” + filename + “‘”
    def title = videoinfo.title.text()
    println “title: ‘” + title + “‘”
    def dbApiURL = data.dbApiURL.text()

    // Only proceed if protocol is RTMP
    if (filename.startsWith(‘rtmp://’)) {
    // Extract parameters
    def posFirstSlash = filename.indexOf(‘/’, new String(“rtmp://”).length()+1)
    def posSecondSlash = filename.indexOf(‘/’, posFirstSlash+1)
    def tcUrl = filename.substring(0, posSecondSlash + 1)
    println “tcUrl: ‘” + tcUrl + “‘”
    def playParam = filename.substring(tcUrl.length(),filename.lastIndexOf(‘.flv’))
    println “playParam: ‘”+playParam+”‘”
    def host = tcUrl.substring(new String(“rtmp://”).length())
    def app = host.substring(host.indexOf(‘/’, 0)+1, host.indexOf(‘/’, host.indexOf(‘/’, 0)+1))
    host = host.substring(0, host.indexOf(‘/’, 0))
    println “host: ‘”+host+”‘”
    println “app: ‘”+app+”‘”

    def session = new RtmpSession(host, 1935, app, playParam, title+”.flv”)
    params = session.connectParams

    def pageUrl = dbApiURL.substring(0, dbApiURL.indexOf(‘/’, new String(“http://”).length()+1)+1)

    params.flashVer = “WIN 10,0,22,87”
    params.tcUrl = tcUrl
    params.pageUrl = pageUrl
    params.swfUrl = pageUrl

    println “params.flashVer: ‘”+params.flashVer+”‘”
    println “params.tcUrl: ‘”+params.tcUrl+”‘”
    println “params.pageUrl: ‘”+params.pageUrl+”‘”
    println “params.swfUrl: ‘”+params.swfUrl+”‘”
    println params

    // Start downloading
    RtmpClient.connect session

    } else {

    // No RTMP protocol
    println (“No RTMP protocol in: ‘”+filename+”‘”)
    println (“Aborting.”)

    }

  2. Peter Thomas says:

    @max – I’ll have to try this when I get time. Yes, resume should be something on the roadmap.

    P.S. you can also use the Flazr project forums / tracker at SourceForge.

  3. Tom says:

    Hey,

    i’m trying to get it working with this stream :

    http://www.oc-tv.net/sonic-youth,concert-live.htm

    but when i try to see the informations about the handshake, wireshark does not show rtmp layer (it seems encrypted). What do you think?

  4. Patrick says:

    Hi Peter,

    since I don’t want you to give me full commitement rights to your source base, I would suggest the following changes using this wonderful blog:

    The affected source file is “AmfProperty.java”.
    In order to download a special rtmp stream, I had to add the following AMF data type to the enum “Type”:
    BYTE_ARRAY(0x0C)

    Additionally, the following lines have to be added into the switch-block within the method decode:

    case BYTE_ARRAY:
    int baSize = in.getInt();
    in.position(in.position() + baSize);
    break;

    Cheers,
    Patrick

  5. Peter Thomas says:

    @Patrick

    Thanks! I just checked in some changes including what you pointed out. It is actually “long string” as per AMF0 – in AMF3 0x0C is “byte array” as you said. You can refer this for more details:

    Click to access amf0_spec_121207.pdf

  6. Brian McGann says:

    Hi Peter,

    Congratulations on a great piece of work! Do you have any groovy scripts or related illustrating use of your new RTMPE support?

    Brian

  7. Peter Thomas says:

    @Brian

    There are a couple of examples bundled with the Flazr distribution. You can find more information at the wiki off the home page here:

    http://apps.sourceforge.net/mediawiki/flazr

  8. Peter Thomas says:

    @Brian oops I read your comment in a hurry :P

    The ‘E’ support is checked into SVN trunk but not released as a distribution yet. Look at the main method in this file, that should be all you need to get started.

  9. Glyn says:

    Have looked at implementing rtmpt?

  10. Brian McGann says:

    Hi Peter,

    Thanks for the reply on June 8: things are working well! Very, very cool. By any chance do you have any relevant groovy script example for this new stuff?

  11. CentOS says:

    Hi,
    I have red5 server installed and working fine with flash client. I have to write a java client which can show live video stream in Java frame.
    Please tell me how to do that.
    If I use JMF then is any way to render streams in java?

    Regards
    Santosh

  12. Peter Thomas says:

    @Santosh

    This is an interesting requirement, because it sounds like you will end up creating a replacement for the Adobe Flash Player. Adobe won’t be happy :)

    I don’t think this will be easy, if you look at this JMF sample, you may get some idea on how to get some arbitrary stream into JMF:

    http://java.sun.com/javase/technologies/desktop/media/jmf/2.1.1/solutions/ScreenGrabber.html

    Using the Flazr project, you will be able to get the raw bytes of each incoming frame. Video could be in H.263 or H.264 format. The tough part will be converting this into a format supported by JMF. Maybe JMF already supports H.263 / H.264 – but I don’t know.

    You can also look at the code of this JMF wrapper for ffmpeg, that may give you some ideas:

    http://sourceforge.net/projects/jffmpeg

  13. Kankaqi says:

    Hi,Sir
    I need some help on Flazr.
    When I am watching the videos on NBC.com,(http://www.nbc.com/saturday-night-live/video/episodes/?vid=1163334#vid=1163334).I use Replay Media Catcher and Wireshark to catch these packets:

    [edit moved large content to here]

  14. Peter Thomas says:

    I hope that one of the fixes took care of this, not sure. Can you download the file from here:

    http://flazr.com/files/

    And replace the existing JAR file you use, (either rename this file or edit the flazr.bat), let me know how it goes. If this doesn’t fix it, you may have to wait a while, really busy, you could try hack the source of course…

  15. Kankaqi says:

    Thanks for your reply, sir.
    I tried flazr-0.6.jar, it doesnt work either.
    I have used Wireshark to catch every packet (you can see that in my previous post)and analyze it.I think i am almost there, but some parameters are wrong. I will pay you 10 dollars(via paypal) if you can help me solve this problem.
    I have also used RTMPDUMP, it wont work either.
    Here is the log produced by RTMPDUMP.1.6:

    [edit moved large content to here]

    I can connect successfully by using both Flazr and RTMPDUMP, but neither will download successfully.No idea why this happened.

    And, this video uses SWF verification, which means the swfurl parameter must be “http://www.nbc.com/assets/video/3-0/swf/videoplayer_extension.swf”.

    You can see my Email address.If you can help me or have any suggestions, Please contact me or just reply here.I will pay you 10 dollars for your help.Thanks a lot.

    Best Regards, Kankaqi

  16. Greg says:

    Hello,

    I’m using a modified version of the “videolectures.groovy” script to download a file from a rtmp streaming server. Unfortunately, I hit the following exception:

    22:45:47,338 [AnonymousIoService-12] INFO [RtmpDecoder] – onStatus code: NetStream.Play.Start
    22:45:47,393 [AnonymousIoService-13] INFO [RtmpDecoder] – server notify: [[STRING(0x02) |RtmpSampleAccess], [BOOLEAN(0x01) false]]
    22:45:47,393 [AnonymousIoService-13] INFO [RtmpDecoder] – server notify: [[STRING(0x02) onStatus], [OBJECT(0x03) [[STRING(0x02) code: NetStream.Data.Start]]]]
    22:45:47,404 [AnonymousIoService-13] ERROR [RtmpClient] – exceptionCaught:
    org.apache.mina.filter.codec.ProtocolDecoderException: java.nio.BufferUnderflowException

    with a big hexdump following the exception.

    flazr is able to connect to the server and seems to start downloading the file. The audio (I’m trying to download an audio-only file) format seems not to be recognized by the RTMP decoder.

    Thanks for your help and the great software!

  17. catonano says:

    Hi

    I just downloaded Flazr 0.7 rc 2

    I’d love to save on my disk some rtmp streams and the instructions point to some Groovy script in the “scripts” folder, but there’s no “scripts” folder in the tarball. Is there any ?

    Thanks for any help

  18. Bill says:

    Can’t get the client to publish to red5. Red5 reports:
    [INFO] [NioProcessor-1] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder – Unhandled request: onMetaData

    Any ideas?

  19. Bill says:

    More info about using client to publish to Red5 . . . .

    Flazr output:

    10:55:39,384 [main] INFO [ClientHandler] – channel opened: [id: 0x0030d082] OPEN
    10:55:39,412 [New I/O client worker #1-1] INFO [ClientHandshakeHandler] – connected, starting handshake
    10:55:39,439 [New I/O client worker #1-1] INFO [RtmpHandshake] – using client version 00000000
    10:55:39,445 [New I/O client worker #1-1] INFO [ClientHandler] – handshake complete, sending ‘connect’
    10:55:39,463 [New I/O client worker #1-1] INFO [ClientHandler] – sending command (expecting result): [0 COMMAND_AMF0 c3 #0 t0 (0) s0] name: connect, transactionId: 1, object: {app=oflaDemo, flashVer=WIN 9,0,124,2, tcUrl=rtmp://192.168.63.121:1935/oflaDemo, fpad=false, audioCodecs=1639.0, videoCodecs=252.0, objectEncoding=0.0, capabilities=15.0, videoFunction=1.0}, args: null
    10:55:39,505 [New I/O client worker #1-1] INFO [ClientHandler] – result for method call: connect
    10:55:39,506 [New I/O client worker #1-1] INFO [ClientHandler] – sending command (expecting result): [0 COMMAND_AMF0 c3 #0 t0 (0) s0] name: createStream, transactionId: 2, object: null, args: []
    10:55:39,509 [New I/O client worker #1-1] INFO [ClientHandler] – ack from server: [1 BYTES_READ c2 #0 t0 (0) s4] 3336
    10:55:39,511 [New I/O client worker #1-1] INFO [ClientHandler] – result for method call: createStream
    10:55:39,529 [New I/O client worker #1-1] INFO [FileChannelReader] – opened file: /home/mrcrab/Documents/projects/research_projects/flazr-0.7-RC3/home/apps/vod/laura.flv
    10:55:39,615 [New I/O client worker #1-1] INFO [ClientHandler] – onStatus code: NetStream.Publish.Start
    10:55:40,271 [New I/O client worker #1-1] INFO [ClientHandler] – ack from server: [1 BYTES_READ c2 #0 t0 (0) s4] 71293
    10:55:41,171 [New I/O client worker #1-1] INFO [ClientHandler] – ack from server: [1 BYTES_READ c2 #0 t0 (0) s4] 131260
    10:55:42,669 [New I/O client worker #1-1] INFO [ClientHandler] – ack from server: [1 BYTES_READ c2 #0 t0 (0) s4] 197811
    10:55:44,474 [New I/O client worker #1-1] INFO [ClientHandler] – ack from server: [1 BYTES_READ c2 #0 t0 (0) s4] 260599
    10:55:45,379 [New I/O client worker #1-1] INFO [ClientHandler] – ack from server: [1 BYTES_READ c2 #0 t0 (0) s4] 324626
    10:55:46,145 [New I/O client worker #1-1] INFO [ChannelUtils] – exception: Connection reset by peer
    10:55:46,146 [New I/O client worker #1-1] INFO [ClientHandler] – channel closed: [id: 0x0030d082, /192.168.63.121:34445 => /192.168.63.121:1935] CLOSED
    10:55:46,148 [New I/O client worker #1-1] INFO [FileChannelReader] – closed file: /home/mrcrab/Documents/projects/research_projects/flazr-0.7-RC3/home/apps/vod/laura.flv

    Red5 log:

    [INFO] [NioProcessor-1] org.red5.server.net.rtmp.RTMPHandler – Connecting to: [WebScope@187275d Depth = 1, Path = ‘/default’, Name = ‘oflaDemo’]
    [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream – Provider connect
    [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream – Stream start
    [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream – Provider connect
    [INFO] [NioProcessor-1] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder – Unhandled request: onMetaData
    [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream – Close
    [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream – Provider disconnect
    [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream – Provider disconnect
    [INFO] [NioProcessor-1] org.red5.server.net.rtmp.RTMPHandler – Connecting to: [WebScope@187275d Depth = 1, Path = ‘/default’, Name = ‘oflaDemo’]
    [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream – Provider connect
    [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream – Stream start
    [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream – Provider connect
    [INFO] [NioProcessor-1] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder – Unhandled request: onMetaData
    [ERROR] [NioProcessor-1] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder – Last header null not new, headerSize: 2, channelId 43
    [WARN] [NioProcessor-1] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder – Unknown object type: 0
    [ERROR] [NioProcessor-1] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder – Last header null not new, headerSize: 2, channelId 16
    [WARN] [NioProcessor-1] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder – Unknown object type: 0
    [ERROR] [NioProcessor-1] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder – Last header null not new, headerSize: 2, channelId 36
    [WARN] [NioProcessor-1] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder – Unknown object type: 0
    [ERROR] [NioProcessor-1] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder – Last header null not new, headerSize: 3, channelId 39457
    [WARN] [NioProcessor-1] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder – Unknown object type: 0
    [ERROR] [NioProcessor-1] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder – Last header null not new, headerSize: 3, channelId 57
    [WARN] [NioProcessor-1] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder – Unknown object type: 0
    [ERROR] [NioProcessor-1] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder – Last header null not new, headerSize: 3, channelId 18
    [WARN] [NioProcessor-1] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder – Unknown object type: 0
    [ERROR] [NioProcessor-1] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder – Last header null not new, headerSize: 3, channelId 26054
    [WARN] [NioProcessor-1] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder – Unknown object type: 0
    [ERROR] [NioProcessor-1] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder – Last header null not new, headerSize: 1, channelId 47
    [ERROR] [NioProcessor-1] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder – Last header null not new, headerSize: 3, channelId 10
    [WARN] [NioProcessor-1] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder – Unknown object type: 0
    [ERROR] [NioProcessor-1] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder – Last header null not new, headerSize: 2, channelId 9
    [WARN] [NioProcessor-1] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder – Unknown object type: 0
    [ERROR] [NioProcessor-1] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder – Last header null not new, headerSize: 3, channelId 33
    [WARN] [NioProcessor-1] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder – Unknown object type: 0
    [ERROR] [NioProcessor-1] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder – Last header null not new, headerSize: 2, channelId 22
    [WARN] [NioProcessor-1] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder – Unknown object type: 0
    [ERROR] [NioProcessor-1] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder – Last header null not new, headerSize: 3, channelId 56
    [WARN] [NioProcessor-1] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder – Unknown object type: 0
    [ERROR] [NioProcessor-1] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder – Last header null not new, headerSize: 3, channelId 62
    [WARN] [NioProcessor-1] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder – Unknown object type: 0
    [ERROR] [NioProcessor-1] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder – Last header null not new, headerSize: 1, channelId 24
    [ERROR] [NioProcessor-1] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder – Error decoding buffer
    org.red5.server.net.protocol.ProtocolException: Error during decoding
    at org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decode(RTMPProtocolDecoder.java:203) [red5.jar:na]
    at org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decodeBuffer(RTMPProtocolDecoder.java:122) [red5.jar:na]
    at org.red5.server.net.rtmp.codec.RTMPMinaProtocolDecoder.decode(RTMPMinaProtocolDecoder.java:61) [red5.jar:na]
    at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:225) [mina-core-2.0.0-RC1.jar:na]
    at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434) [mina-core-2.0.0-RC1.jar:na]
    at org.apache.mina.core.filterchain.DefaultIoFilterChain.access$1200(DefaultIoFilterChain.java:46) [mina-core-2.0.0-RC1.jar:na]
    at org.apache.mina.core.filterchain.DefaultIoFilterChain$EntryImpl$1.messageReceived(DefaultIoFilterChain.java:793) [mina-core-2.0.0-RC1.jar:na]
    at org.apache.mina.core.filterchain.IoFilterAdapter.messageReceived(IoFilterAdapter.java:119) [mina-core-2.0.0-RC1.jar:na]
    at org.apache.mina.core.filterchain.DefaultIoFilterChain.callNextMessageReceived(DefaultIoFilterChain.java:434) [mina-core-2.0.0-RC1.jar:na]
    at org.apache.mina.core.filterchain.DefaultIoFilterChain.fireMessageReceived(DefaultIoFilterChain.java:426) [mina-core-2.0.0-RC1.jar:na]
    at org.apache.mina.core.polling.AbstractPollingIoProcessor.read(AbstractPollingIoProcessor.java:638) [mina-core-2.0.0-RC1.jar:na]
    at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:598) [mina-core-2.0.0-RC1.jar:na]
    at org.apache.mina.core.polling.AbstractPollingIoProcessor.process(AbstractPollingIoProcessor.java:587) [mina-core-2.0.0-RC1.jar:na]
    at org.apache.mina.core.polling.AbstractPollingIoProcessor.access$400(AbstractPollingIoProcessor.java:61) [mina-core-2.0.0-RC1.jar:na]
    at org.apache.mina.core.polling.AbstractPollingIoProcessor$Processor.run(AbstractPollingIoProcessor.java:969) [mina-core-2.0.0-RC1.jar:na]
    at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64) [mina-core-2.0.0-RC1.jar:na]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [na:1.6.0_18]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [na:1.6.0_18]
    at java.lang.Thread.run(Thread.java:636) [na:1.6.0_18]
    Caused by: java.lang.RuntimeException: Action was null
    at org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decodeNotifyOrInvoke(RTMPProtocolDecoder.java:844) [red5.jar:na]
    at org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decodeInvoke(RTMPProtocolDecoder.java:780) [red5.jar:na]
    at org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decodeMessage(RTMPProtocolDecoder.java:558) [red5.jar:na]
    at org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decodePacket(RTMPProtocolDecoder.java:385) [red5.jar:na]
    at org.red5.server.net.rtmp.codec.RTMPProtocolDecoder.decode(RTMPProtocolDecoder.java:190) [red5.jar:na]
    … 18 common frames omitted
    [WARN] [NioProcessor-1] org.red5.server.net.rtmp.codec.RTMPProtocolDecoder – Closing connection because decoding failed: RTMPMinaConnection from 192.168.63.121 : 34445 to 192.168.63.121 (in: 396934 out 3502 )
    [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream – Close
    [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream – Provider disconnect
    [INFO] [NioProcessor-1] org.red5.server.stream.ClientBroadcastStream – Provider disconnect

  20. Serge P. Nekoval says:

    What is the status of Flazr? Is it still alive?

    I’ve downloaded 0.7 and tried to use as a server for audio recording. I’ve used Red5 publisher application (Flex) and tried to record audio. After successful connect, Publisher hangs (waiting for something?)

    Client logs:

    12:19:17:667 - Using Adobe Windows Flash Player 10,1,102,64 (Debugger)
    12:19:31:494 - Started audio device Microphone (VIA High Definition Audio)
    12:19:36:656 - Connecting to rtmp://localhost/vod
    12:19:37:912 - NetConnection.Connect.Success
    12:19:46:962 - NetStream.Publish.Start
    

    Server logs:

    12:22:26,919 [main] INFO [RtmpConfig] - loading config from: c:\dev\flazr-0.7-RC2\conf\flazr.properties
    12:22:26,921 [main] INFO [RtmpConfig] - home dir: 'c:\dev\flazr-0.7-RC2\home'
    12:22:26,921 [main] INFO [RtmpConfig] - server port: 1935 (stop 1934)
    12:22:26,998 [main] INFO [RtmpServer] - server started, listening on: 0.0.0.0/0.0.0.0:1935
    12:22:26,999 [StopMonitor] INFO [StopMonitor] - stop monitor thread listening on: ServerSocket[addr=/127.0.0.1,port=0,localport=1934]
    12:22:43,001 [New I/O server boss #1 (channelId: 12115735, /0.0.0.0:1935)] INFO [ServerHandler] - opened channel: [id: 0x00fd13b5, /127.0.0.1:55799 => /127.0.0.1:1935] OPEN
    12:22:43,111 [New I/O server worker #1-1] INFO [ServerHandshakeHandler] - handshake done, rtmpe: false
    12:22:43,135 [New I/O server worker #1-1] INFO [ServerHandler] - connect, client id: 16585653, application: [name: 'vod' streams: {}]
    12:22:54,363 [New I/O server worker #1-1] INFO [ServerHandler] - publish, stream name: stream1291972952511, type: record
    12:22:54,366 [New I/O server worker #1-1] INFO [ServerHandler] - created server side live stream: [name: 'stream1291972952511' type: RECORD publisher: [id: 0x00fd13b5, /127.0.0.1:55799 => /127.0.0.1:1935] subscribers: DefaultChannelGroup(name: stream1291972952511, size: 0) config: []]
    

    nothing happens after that…

    I’m fairly interested in embedding Flazr as an RTMP server, replacing Red5 (which is nearly impossible to embed).

  21. Peter Thomas says:

    I’ll admit in terms of stability, Flazr is more suited as a client, for e.g. see here: http://code.google.com/p/red5-screenshare/

    Can you use the latest code checked in? There were some fixes that went in after the official 0.7 release – specifically for server re-publish and recording. See revision 85. I am not very active on the project now, but try contacting “florian” who made the last change, he was working on Flazr as a server.

Leave a comment